package com.zy.crm.workbench.service.impl;

import com.github.pagehelper.PageHelper;
import com.zy.crm.utils.DateTimeUtil;
import com.zy.crm.utils.UUDIUtil;
import com.zy.crm.vo.Message;
import com.zy.crm.vo.PaginationVo;
import com.zy.crm.workbench.dao.GuoJiDao;

import com.zy.crm.workbench.domain.GuoJi;

import com.zy.crm.workbench.domain.HangDao;
import com.zy.crm.workbench.service.GuoJiService;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author CYH

 */

@Service
public class GuoJiServiceImpl implements GuoJiService {


    // 市场活动备注dao
    @Resource
    private GuoJiDao guoJiDao;

    // 添加使用者信息
    //写事物操作，默认是事物开启，当抛出运行异常时候，就会回滚
    @Transactional
    @Override
    public Message saveGuoJi(GuoJi guoJi)  {
        Message msg = new Message();
        //添加id和时间，
        // 创建UUID,设置三个表系统的编号一致
        String uuid = UUDIUtil.getUUID();
        guoJi.setGuoJi_id(uuid);
        guoJi.setGuoJi_history_id(uuid);
        guoJi.setSafe_id(uuid);
        //船名统一赋予
        guoJi.setSafe_name(guoJi.getGuoJi_name());
        guoJi.setGuoJi_history_name(guoJi.getGuoJi_name());

        System.out.println(guoJi);//有数据，前后端数据传输无误
        //System.out.println("继续排查是否是service有问题");
        //
        // 得到保存信息成功条数,排查得知是这里出问题了，没有返回出来了
        //三个表同时插入总的数据，实际上也就是插入对于的数据而已
        int result1=guoJiDao.insert_safe_zs(guoJi);
       // System.out.println("第一个插入成功"+result1);
        int result2=guoJiDao.insert_guoJi_zs(guoJi);
        //System.out.println("第二个插入成功");
        int result3=guoJiDao.insert_guoJi_history(guoJi);
        //System.out.println("第三个插入成功");

        //System.out.println("测试是否出数据层"+result);
        // 添加成功
        if(result1 > 0&&result2>0&&result3>0){//同时处理
            System.out.println("添加成功");
            msg.setSuccess(true);
        //  添加失败
        }else {
            System.out.println("添加失败");
            msg.setSuccess(false);
            throw new  RuntimeException("添加失败");//事物自动回滚
        }

        return msg;
    }

    // 分页查询信息
    @Override
    public PaginationVo<GuoJi> getPageList(String pageNo, String pageSize, GuoJi guoJi) {
        PaginationVo<GuoJi> paginationVo = new PaginationVo<>();
        // 根据页码查询 利用pageHelper进行分页查询
        // 第一个参数是页号 第二个参数是每页的记录条数
        int pageNum = Integer.parseInt(pageNo);
        int pageSizes = Integer.parseInt(pageSize);
        PageHelper.startPage(pageNum,pageSizes);
        //System.out.println("成功进入业务层"+pageNo+pageSize);
        List<GuoJi> guoJis = guoJiDao.selectPageList(guoJi);
       // System.out.println("成功出业务层");
        //System.out.println(guoJis);//有数据
        // 查询总条数
        //System.out.println("加入查询总条数");
        int totalSize = guoJiDao.selectTotalSize(guoJi);
        //System.out.println("成功查出总条数");
        // 利用vo封装总的记录条数和查询结果集
        paginationVo.setDataList(guoJis);//对应的是activity
        paginationVo.setTotalSize(totalSize);
        return paginationVo;
    }


    // 删除用户，因为有可能有多个用户要删除，所以传入数组
    @Override
    @Transactional
    public Message deleteGuoJi(String[] GuoJiIds) {//这里小心，只有id传了进来，而且只有一类得id
        
        Message msg = new Message();
        //System.out.println("进入删除的service层");
        int GuoJiResult1 = guoJiDao.deleteGuoJi_historyByIds(GuoJiIds);
        //System.out.println("出第一层");
        int GuoJiResult2 = guoJiDao.deleteGuoJi_safeByIds(GuoJiIds);
        //System.out.println("出第二层");
        int GuoJiResult3 = guoJiDao.deleteGuoJi_zsByIds(GuoJiIds);
        //System.out.println("出第三层");
        if((GuoJiResult1==GuoJiResult2)&&(GuoJiResult1==GuoJiResult3)&&GuoJiResult1>0&&GuoJiResult2>0&&GuoJiResult3>0){
            msg.setSuccess(true);
            String result = "成功删除使用者" + GuoJiResult1 + "条";//三条数据都一样的
            msg.setMsg(result);
        }
        else{
            msg.setSuccess(false);
            String result = "删除失败";//三条数据都一样的
             msg.setMsg(result);
            throw new  RuntimeException("添加失败");//事物自动回滚

        }
        return msg;
    }



//修改用户信息
    @Transactional
    @Override
    public Message updateGuoJiById(GuoJi guoJi) {
        System.out.println(guoJi);
        Message msg = new Message();
        int result3 =  guoJiDao.updateGuoJi_zsById(guoJi);
        //System.out.println("第三层成功");
        //System.out.println("成功进入了业务层");
        int result1 =  guoJiDao.updateGuoJi_historyById(guoJi);
        //System.out.println("第一层成功");
        int result2 =  guoJiDao.updateGuoJi_safeById(guoJi);
        //System.out.println("第二次成功");

        //System.out.println("测试是否出了持久层");
        // 成功修改一条记录表示修改成功
        if(result1 == 1&result2==1&&result3==1){
            msg.setSuccess(true);
        }
        else {
          msg.setSuccess(false);
         throw new  RuntimeException("修改失败");//事物自动回滚

        }
        return msg;
    }

//根据id查一条用户信息
@Transactional
@Override
public GuoJi  getGuoJiById(String id) {
    //System.out.println("测试是否进入了业务层，测试id是否存入"+id);
    // 拿到活动信息,id传输无误，查看sql语句
    GuoJi gj = guoJiDao.selectGuoJi_historyById(id);
    //System.out.println(gj);
    GuoJi gj1 =guoJiDao.selectGuoJi_safeById(id);
    //System.out.println(gj1);
    GuoJi gj2 =guoJiDao.selectGuoJi_zsById(id);
    //System.out.println(gj2);
    if(gj!=null&&gj1!=null&&gj2!=null) {
        //System.out.println("测试是否数据添加成功？？");

        //设置国籍表
        //System.out.println("gj1的数据是"+gj2);
        //System.out.println("测试gj2的id获取"+gj2.getGuoJi_id());

//设置国籍表
        gj.setGuoJi_id(gj2.getGuoJi_id());
        gj.setGuoJi_beginTime(gj2.getGuoJi_beginTime());
        gj.setGuoJi_effectiveTime(gj2.getGuoJi_effectiveTime());
        gj.setGuoJi_createTime(gj2.getGuoJi_createTime());
        gj.setGuoJi_everName(gj2.getGuoJi_everName());
        gj.setGuoJi_government(gj2.getGuoJi_government());
        gj.setGuoJi_id(gj2.getGuoJi_id());
        gj.setGuoJi_name(gj2.getGuoJi_name());
        gj.setGuoJi_num(gj2.getGuoJi_num());

        //设置安全表
        gj.setSafe_beginTime(gj1.getSafe_beginTime());
        gj.setSafe_endTime(gj1.getSafe_endTime());
        gj.setSafe_government(gj1.getSafe_government());
        gj.setSafe_guiShu(gj1.getSafe_guiShu());
        gj.setSafe_id(gj1.getSafe_id());
        gj.setSafe_name(gj1.getSafe_name());
        gj.setSafe_num(gj1.getSafe_num());
        gj.setSafe_type(gj1.getSafe_type());


    }
    else {
        throw new  RuntimeException("数据查询失败");//事物自动回滚

    }
   // System.out.println("测试是否能出持久层"+gj);
    return gj;
    }



    //打印
    @Override
    public List<GuoJi>  getPrint(GuoJi water) {

        List<GuoJi> hd = guoJiDao.print(water);
        //System.out.println("测试是否能出持久层");

        return hd;
    }

}












